<?php namespace web\home\controller;

/**
 * Created by PhpStorm.
 * User: qianchenmiao
 * Date: 2016/10/30
 * Time: 22:42 \列表页控制器
*/
class ListPage extends Common{
	protected $temp=[];
	public function index(){
//		分配title数据
		//				分配title数据
		$conf=['title'=>'分类页'];
//				分配js
		$js=['nav'=>"{{__ROOT__}}/resource/home/js/nav.js"];
		$cid=q('get.cid',0,'intval');
		$bid=q('get.bid',0,'intval');
		if($cid){
//		如果是分类过来的
			$cateData=Db::table('category')->where('cid',$cid)->first();
			$data=Db::table('category')->get();
//			如果是顶级分类列出子分类
			if($cateData['pid']==0){
//				递归找子集
				$son=$this->getSon($data,$cid);
				$cateData['son']=Db::table('category')->whereIn('cid',$son)->lists('cid,cname');
				$goodsData=Db::table('goods')->whereIn('cid',$son)->get();

			}else{//如果是子集分类
	//				处理面包屑找父级
					$fatherData=$this->getFather($data  ,$cid);
					$fatherData=array_reverse($fatherData);
					$gids = Db::table('goods')->where('cid',$cid)->lists('gid');
					if($gids){
					//根据商品id在商品属性表中获得这些商品有哪些属性值
					$attrData = Db::table('goods_attr')->whereIn('gid',$gids)->groupBy('gavalue')->get();
					//数组重组，把taid（类型属性id）一样放在一起
					$tp = [];
					foreach($attrData as $k=>$v)
					{
						$tp[$v['taid']][] = $v;
					}
					//根据taid获得属性名称
					$finalTemp = [];
					foreach($tp as $k=>$v){
						$finalTemp[] = [
							//根据taid获得属性名称
							'name'=>Db::table('type_attr')->where('taid',$k)->where('class',2)->pluck('taname'),
							'value'=>$v,
						];
					}
					foreach($finalTemp as $k=>$v){
						if($v['name']=='颜色'||$v['name']=='选择制式'){
							$final[]=$v;
						}
					}
//					分配制式颜色信息
					$param=isset($_GET['param'])?explode('_',$_GET['param']):array_fill(0,count($final),0);
//					分配数组以后做判断用
					View::with("final",$final)->with('param',$param);

					$filterGids=[];
					foreach($param as $k=>$v){

						if($v){//如果$v不为0开始筛选 只处理有筛选

//							通过筛选gaid对应的gavalue找到一个具体属性值
							$gavalue=Db::table('goods_attr')->where('gaid',$v)->pluck('gavalue');
//							根据gtvalue获取所有属性商品
							$filterGids[]=Db::table('goods_attr')->where('gavalue',$gavalue)->lists('gid');
						}
					}
//					 $filterGids是筛选出来的
					if($filterGids){
//						如果有筛选  求交集
//						拿出数组中的第一个元素
						$finalGids=$filterGids[0];
						//循环跟数组中的每一个求交集
						foreach($filterGids as $k=>$v)
						{
							//求交集
							$finalGids = array_intersect($finalGids,$v);//数组求交集
						}
						//最终的结果再跟$gids求一个交集
						//因为$finalGids得到的结果是从商品属性表来的
						//有可能找见的商品不是我当前分类下的
						$finalGids = array_intersect($finalGids,$gids);
					}else{
//						如果没有筛选
						$finalGids = $gids;
					}
				}
				if($finalGids){
					$goodsData=$goodsData = Db::table('goods')->whereIn('gid',$finalGids)->get();
				}
			}
		}elseif($bid){
//				如果是品牌过来的
			$goodsData=Db::table('goods')->where('bid',$bid)->get();
			$cateData['cname']=Db::table('brand')->where('bid',$bid)->pluck('bname');

		}

		View::with('js',$js)->with('fatherData',$fatherData)->with('conf',$conf)->with('cateData',$cateData)->with('goodsData',$goodsData)->make();
	}
	//找子集函数
	public function getSon($data,$cid){
		foreach($data as $k=>$v){
			if($cid==$v['pid']){
				$this->temp[]=$v['cid'];
				$this->getSon($data,$v['cid']);
			}
		}
		return $this->temp;

	}
	//找父级函数
	public function getFather($data,$cid){
		foreach($data as $k=>$v){
			if($cid==$v['cid']){
				$this->temp[]=$v;
				$this->getFather($data,$v['pid']);
			}
		}
		return $this->temp;
	}
	//搜索功能
	public function sousuo(){
		$conf=['title'=>'搜索结果'];
		$content=$_POST['contene'];
		$sousuoData=Db::query("select * from littleTwo_goods where gname like ?",["%{$content}%"]);
		$js=['nav'=>"{{__ROOT__}}/resource/home/js/nav.js"];
		View::with('sousuoData',$sousuoData)->with('conf',$conf)->with('js',$js)->make();
	}
}